package ar.uade.edu.fain.ad.client.delegate;

import java.util.Date;
import java.util.List;
import java.util.Set;

import ar.uade.edu.fain.ad.common.exception.FacturaYaPagadaException;
import ar.uade.edu.fain.ad.common.exception.PedidoFacturadoException;
import ar.uade.edu.fain.ad.common.exception.PedidoPendienteException;
import ar.uade.edu.fain.ad.common.transfer.CajaVO;
import ar.uade.edu.fain.ad.common.transfer.CierreCajaVO;
import ar.uade.edu.fain.ad.common.transfer.FacturaVO;
import ar.uade.edu.fain.ad.common.transfer.LocalVO;
import ar.uade.edu.fain.ad.common.transfer.MedioPagoVO;
import ar.uade.edu.fain.ad.common.transfer.PedidoVO;

public interface CajaServiceDelegate {

	public abstract List<MedioPagoVO> buscarMediosPagoHabilitados();
	
	public abstract List<PedidoVO> buscarPedidosSinFactura(LocalVO localVO);
	
	public abstract FacturaVO facturar(CajaVO cajaVO, Set<PedidoVO> pedidoVOs)
			throws PedidoFacturadoException;

	public abstract void registrarPago(
			FacturaVO facturaVO, MedioPagoVO medioPagoVO)
			throws FacturaYaPagadaException;
	
	public abstract void calcularComisiones(LocalVO localVO, Date fecha)
			throws PedidoPendienteException; 
	
	public abstract CierreCajaVO prepararCierre(CajaVO cajaVO) 
			throws PedidoPendienteException;
	
	public abstract void confirmarCierre(CierreCajaVO cierreCajaVO) 
			throws PedidoPendienteException;

}
